package log

import (
	"os"
	"strconv"
)

// Config 日志配置结构体
// 包含日志级别、输出格式、文件路径等配置项
type Config struct {
	Level      string // 日志级别: debug, info, warn, error, fatal, panic
	Format     string // 输出格式: json, text
	OutputPath string // 输出路径: stdout 或文件路径
	MaxSize    int    // 日志文件最大大小(MB)
	MaxBackups int    // 最大备份文件数
	MaxAge     int    // 最大保存天数
	Compress   bool   // 是否压缩备份文件
}

// LoadConfig 从环境变量加载日志配置
// 支持通过环境变量自定义日志行为，未设置则使用默认值
func LoadConfig() *Config {
	return &Config{
		Level:      getEnv("LOG_LEVEL", "info"),
		Format:     getEnv("LOG_FORMAT", "json"),
		OutputPath: getEnv("LOG_OUTPUT_PATH", "stdout"),
		MaxSize:    getEnvAsInt("LOG_MAX_SIZE", 100),
		MaxBackups: getEnvAsInt("LOG_MAX_BACKUPS", 10),
		MaxAge:     getEnvAsInt("LOG_MAX_AGE", 30),
		Compress:   getEnvAsBool("LOG_COMPRESS", false),
	}
}

// getEnv 从环境变量获取值，不存在则返回默认值
func getEnv(key, defaultValue string) string {
	if value := os.Getenv(key); value != "" {
		return value
	}
	return defaultValue
}

// getEnvAsInt 从环境变量获取整数值
func getEnvAsInt(key string, defaultValue int) int {
	valueStr := getEnv(key, "")
	if valueStr == "" {
		return defaultValue
	}

	value, err := strconv.Atoi(valueStr)
	if err != nil {
		return defaultValue
	}
	return value
}

// getEnvAsBool 从环境变量获取布尔值
func getEnvAsBool(key string, defaultValue bool) bool {
	valueStr := getEnv(key, "")
	if valueStr == "" {
		return defaultValue
	}

	value, err := strconv.ParseBool(valueStr)
	if err != nil {
		return defaultValue
	}
	return value
}